import json

import redis


class RedisSingle:
    def __init__(self, conn_pool):
        # 连接redis decode_responses=True 字符串
        self.__redis = redis.Redis(connection_pool=conn_pool)

    # 检查连接是否成功
    def is_connected(self):
        return self.__redis.ping()

    # 设置key-value
    def set(self, key, value):
        self.__redis.set(key, value)

    # 获取key-value
    def get(self, key):
        ret = self.__redis.get(key)
        if ret == "" or ret is None:
            return ""
        return ret.decode()

    # 判断key是否存在
    def is_existsKey(self, key):
        # 返回1存在，0不存在
        return True if self.__redis.exists(key) == 1 else False

    # 添加集合操作
    def add_set(self, key, value):
        # 集合中存在该元素则返回0,不存在则添加进集合中，并返回1
        # 如果key不存在，则创建key集合，并添加元素进去,返回1
        return self.__redis.sadd(key, value)

    # 添加集合操作
    def get_set(self, key):
        # 集合中存在该元素则返回0,不存在则添加进集合中，并返回1
        # 如果key不存在，则创建key集合，并添加元素进去,返回1
        return self.__redis.smembers(key)

    # Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在，一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时，返回一个错误。
    def lrpush_list(self, key, value, rl=False):
        if rl:
            return self.__redis.lpush(key, value)
        return self.__redis.rpush(key, value)

    # Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在，一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时，返回一个错误。
    def lrpop_list(self, key, rl=False):
        if rl:
            return self.__redis.lpop(key)
        return self.__redis.rpop(key)

    # 命令移出并获取列表的第一/最后一个元素， 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
    def blrpop_list(self, key, rl=False):
        if rl:
            return self.__redis.blpop(key)
        return self.__redis.brpop(key)

    # 判断value是否在key集合中
    def is_inset(self, key, value):
        '''判断value是否在key集合中，返回布尔值'''
        return self.__redis.sismember(key, value)

    def expire(self, key, time_sec):
        self.__redis.expire(key, time_sec)

    # 关闭连接
    def close(self):
        self.__redis.close()


if __name__ == '__main__':
    redis_pool = redis.ConnectionPool(host='123.56.101.136', port=8379, db=0, password='Redis~!@19881103',
                                      max_connections=50)
    redis_single = RedisSingle(redis_pool)
    redis_single.set(key="toutiao", value="5205")
    redis_single.expire(key="toutiao", time_sec=5 * 60)
    print(redis_single.get("toutiao"))
    # users = []
    # users.append({"username": "pansha", "password": "741852963"})
    # users.append({"username": "pansha1", "password": "741852963"})
    # redis_single.set("users", json.dumps(users))
    # print(redis_single.is_existsKey("44921229-213f-436b-a309-712eb80bf3b4"))
